/*
 * Distribucion.java	
 *
 * Copyright 2008 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 07/10/08, 11:23:38 AM
 */

package com.ufps.cuatro.modelo.representacion;

import com.ufps.cuatro.util.model.MyTableModelDistribucionComponentes;
import java.util.ArrayList;

/**
 * <i><b>Distribucion:</b></i>Provee Métodos para la Distribución de los Componentes
 * que representan los Controles Graficos (Swing).
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 07/10/08 
 */
public interface Distribucion {    
    
    /**
     * Utilizado en la Inclusión del Componentes incluidos, indica que el <code>ComponenteGenerado</code>
     * ha sido incluido.
     */
    public final static int INCLUISION_OK = 0;
    /**
     * Utilizado en la Inclusión del Componentes incluidos, indica que el <code>ComponenteGenerado</code>
     * fue incluido anteriormente.
     */
    public final static int INCLUISION_PREVIA = 1;
    /**
     * Utilizado en la Inclusión del Componentes incluidos, indica que el <code>ComponenteGenerado</code>
     * fue excluido.
     */
    public final static int EXCLUISION_OK = 2;
    /**
     * Utilizado en la Inclusión del Componentes incluidos, indica que el <code>ComponenteGenerado</code>
     * ha sido excluido anteriormente.
     */
    public final static int EXCLUISION_PREVIA = 3;
    /**
     * Utilizado en la Inclusión del Componentes incluidos, indica que el <code>ComponenteGenerado</code>
     * no ha sido seleccionado.
     */
    public final static int NO_SELECCION = 4;
    /**
     * Utilizado en la Inclusión del Componentes incluidos, indica que el <code>ComponenteGenerado</code>
     * ha generado un error al actualizar su estado en la distribución.
     */
    public final static int ERROR_UPDATE = 5;    

    /**
     * Devuelve el Ancho total en unidades de Distribución de los Componentes
     * Agregados.
     * @return Ancho Total.
     * @deprecated
     */
    public abstract int sizeWidth();

    /**
     * Devuelve el Alto total en unidades de Distribución de los Componentes
     * Agregados.
     * @return Alto Total.
     * @deprecated 
     */
    public abstract int sizeHeight();

    /**
     * Devuelve el Modelo de la Distribución de los Componentes Agregados.
     * @return Modelo de la Tabla de Distribución.
     */
    public abstract MyTableModelDistribucionComponentes getObjModeloTablaDistribucion();    
    /**
     * Establece el Modelo de la Tabla de Distribución de los Componentes Agregados.
     * @param objDataTablaDistribucion Contenido.
     */
    public abstract void setObjModeloTablaDistribucion(Object[][] objDataTablaDistribucion);     
    
    /**
     * Ubica en los Componentes Agregados en la Matriz de Distribución.
     * @return Resultado del Proceso.
     */
    public abstract boolean ubicarComponentesEnTablaDistribucion();    
    
    /**
     * Crea una Distribución General para las <code>PlantillaComponente</code> que representan
     * los <code>Componente</code> Inicialmente Agregados al <code>ComponenteDistribuidor</code>.
     * @param objPlantillaComboDistribucionGrupal <code>PlantillaCombo</code> que representará la Distribución.
     * @param objTempPlantillasComponentes Colección de <code>PlantillaComponente</code> que representará
     * los <code>Componente</code> Inicialmente Agregados.
     */
    public abstract void crearDistribuicionGrupalInicial(PlantillaCombo objPlantillaComboDistribucionGrupal, ArrayList<PlantillaComponente> objTempPlantillasComponentes);
    
    /**
     * Crea una Distribución General Genérica para las <code>PlantillaComponente</code> que representan
     * los <code>Componente</code> Inicialmente Agregados al <code>ComponenteDistribuidor</code>
     * en forma Horizontal.
     * @param objPlantillaComboDistribucionGrupal <code>PlantillaCombo</code> que representan la Distribución Grupal.
     * @return Colección de las <code>PlantillaComponente</code> que representan
     * los <code>Componente</code> Inicialmente Agregados al <code>ComponenteDistribuidor</code>
     * en forma Horizontal.
     */
    public abstract ArrayList<PlantillaComponente> getDistribucionGrupalInicialHorizontal(PlantillaCombo objPlantillaComboDistribucionGrupal);
    
    /**
     * Crea una Distribución General Genérica para las <code>PlantillaComponente</code> que representan
     * los <code>Componente</code> Inicialmente Agregados al <code>ComponenteDistribuidor</code>
     * en forma Vertical.
     * @param objPlantillaComboDistribucionGrupal <code>PlantillaCombo</code> que representan la Distribución Grupal.
     * @return Colección de las <code>PlantillaComponente</code> que representan
     * los <code>Componente</code> Inicialmente Agregados al <code>ComponenteDistribuidor</code>
     * en forma Vertical.
     */
    public abstract ArrayList<PlantillaComponente> getDistribucionGrupalInicialVertical(PlantillaCombo objPlantillaComboDistribucionGrupal);
    
    /**
     * Crea una Distribución General Genérica para las <code>PlantillaComponente</code> que representan
     * los <code>Componente</code> Inicialmente Agregados al <code>ComponenteDistribuidor</code>
     * en forma Rectangular.
     * @param objPlantillaComboDistribucionGrupal <code>PlantillaCombo</code> que representan la Distribución Grupal.
     * @return Colección de las <code>PlantillaComponente</code> que representan
     * los <code>Componente</code> Inicialmente Agregados al <code>ComponenteDistribuidor</code>
     * en forma Rectangular.
     */
    public abstract ArrayList<PlantillaComponente> getDistribucionGrupalInicialRectangular(PlantillaCombo objPlantillaComboDistribucionGrupal);
    
    /**
     * Actualiza la Distribución Interna del <code>ComponenteDistribuidor</code>.
     * @param objPlantillaComboDistribucionGrupalSeleccionada 
     * @return boolean que indica si la Actualización fue llevada a cabo.
     */
    public abstract boolean actualizarPlantillaComboDistribucionGrupalSeleccionada(PlantillaCombo objPlantillaComboDistribucionGrupalSeleccionada);
}
